// 定义hero的路由中间件
const express = require('express');
const execSql = require('../util/sql');

let heroRouter = express.Router();

// 定义hero相关接口
// 1.0 获取所有的英雄数据
heroRouter.get('/getHeroList', (req, res) => {
    //  1. 获取参数名称heroName
    let { heroName } = req.query;

    // 2.0 判断heroName 如果没有值则返回全部英雄
    let sql = `select * from heros where isdelete = 0 `;
    if (heroName) {
        sql += ` and name like '%${heroName}%'`;
    }

    // 3.0 执行
    execSql(sql, (err, result) => {
        if (err) {
            res.json({ code: 500, msg: err.message });
            return;
        }

        // 返回正常结果
        res.json({ code: 200, msg: '请求成功', data: result })
    })

})

// 2.0 新增一个英雄
heroRouter.post('/addHero', (req, res) => {
    // 1.0 搞定请求报文体中的数据
    let { name, gender, img } = req.body;

    // 1.1 由于数据表中name字段不能为空，所以做个非空判断
    if (!name) {
        res.json({ code: 201, msg: "name参数不能为空" });
        return;
    }

    // 2.0 响应的数据
    // 2.1 将接收到的英雄数据入库
    let sql = ` insert into heros(name,gender,img,isdelete) values ('${name}','${gender}','${img}',0) `;
    execSql(sql, (err, result) => {
        if (err) {
            res.json({ code: 500, msg: err.message });
            return;
        }

        res.json({ "code": 200, "msg": "添加成功" });
    })

})

// 3.0 删除一个英雄(这里的删除是软删除（指的是将数据表中的isdelete设置为1）)
// /delHeroById/1--> req.params
heroRouter.get('/delHeroById/:id', (req, res) => {

    let { id } = req.params;
    // console.log(id);
    if (!id) {
        res.json({ code: 201, msg: 'id参数不合法,必须是一个数字' });
        return;
    }

    // 响应处理
    let sql = ` update heros set isdelete = 1 where  id = ${id}`;
    execSql(sql, (err, result) => {
        if (err) {
            res.json({ code: 500, msg: err.message });
            return;
        }

        res.json({ code: 200, msg: '删除数据成功' });
    })
})

// 4.0 根据id获取英雄数据
heroRouter.get('/getHeroById', (req, res) => {
    console.log('req.user', req.user);
    // 获取请求报文中的参数
    let { id } = req.query;

    // 参数合法性检查
    if (!id) {
        res.json({ code: 201, msg: 'id参数必须是一个数字' });
        return;
    }

    // 查询数据库获得结果响应回去
    let sql = ` select * from heros where isdelete = 0 and id = ${id} `;
    execSql(sql, (err, result) => {
        if (err) {
            res.json({ code: 500, msg: err.message });
            return;
        }

        // result 是一个数组
        if (result.length <= 0) {
            res.json({ code: 200, msg: '数据未获取到', data: {} })
            return;
        }

        res.json({ code: 200, msg: "请求成功", data: result[0] })
    })

})

// 5.0 更新英雄数据/hero/updateHero
heroRouter.post('/updateHero', (req, res) => {
    // 获取参数 （req.body  ,类型是; applicaton/x-www-form-urlecndoed）
    let { id, name, gender, img } = req.body;

    // 参数合法性检查
    if (!name) {
        res.json({ code: 201, msg: '英雄名参数必须填写' });
        return;
    }

    // 响应
    let sql = ` update heros set name='${name}' ,gender='${gender}',img='${img}' where id= ${id}`;
    console.log(sql);
    execSql(sql, (err, result) => {
        if (err) {
            res.json({ code: 500, msg: err.message });
            return;
        }
        res.json({ "code": 200, "msg": "数据更新成功" });
    })
})

// 6.0 上传英雄头像图片
const multer = require('multer');
// let upload = multer({ dest: 'uploads/' });
var storage = multer.diskStorage({
    // 让我们自主修改文件保存位置
    destination: function (req, file, cb) {
        cb(null, 'uploads/')  // 指定文件保存的路径为uploads/文件夹
    },
    // 让我们自主修改保存的文件名
    filename: function (req, file, cb) {
        // 当前客户端上传的文件名 + 时间作为一个新的文件名
        // console.log(file);
        let [filename, extname] = file.originalname.split('.');
        // 重新命名保存的文件名，其中一定要加上时间戳（时间的整数表示法），来保证同名文件不会被覆盖
        cb(null, filename + Date.now() + '.' + extname);
    }
})

let upload = multer({ storage: storage })
let baseUrl = 'http://127.0.0.1:3001/';

heroRouter.post('/uploadFile', upload.single('file_data'), (req, res) => {
    // req.file就是上传成功的文件描述对象
    console.log(req.file);

    res.json({ code: 200, "msg": "上传成功", img: `${baseUrl + req.file.path}` });
})

module.exports = heroRouter;